/**
 * 
 */
package linha;

import java.util.ArrayList;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import br.com.sistransporte.transite.linha.controller.LinhaFacade;
import br.com.sistransporte.transite.linha.linhaponto.controller.LinhaPontoFacade;
import br.com.sistransporte.transite.onibus.controller.OnibusFacade;
import br.com.sistransporte.transite.ponto.controller.PontoFacade;
import br.com.sistransporte.transitedto.linha.LinhaDTO;
import br.com.sistransporte.transitedto.linha.LinhaPontoDTO;
import br.com.sistransporte.transitedto.onibus.OnibusDTO;
import br.com.sistransporte.transitedto.ponto.PontoDTO;
import br.com.sistransporte.transitedto.trajeto.TrajetoDTO;
import br.com.src.dto.abstractdto.AbstractDTO;
import br.com.src.dto.requisicao_retorno.RequisicaoServico;
import br.com.src.dto.requisicao_retorno.RetornoServico;
import br.com.src.utilidades.Utilidades;

/**
 * Classe que representa
 *
 *
 * @author Nelson Luis da Silva Junior <nelson.jr13@hotmail.com@>
 * @since 5 de Jul de 2013 00:58:55
 * @version 1.0
 */
@ContextConfiguration( locations = { "classpath:rootTeste-context.xml", "classpath:rootTesteLog-context.xml" } )
@RunWith( SpringJUnit4ClassRunner.class )
public final class LinhaTeste{

	//@Test
	public void filtrar() throws Throwable {
		LinhaPontoDTO linhaPonto = new LinhaPontoDTO();
		linhaPonto.setLinha(new LinhaDTO("15"));
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "teste", linhaPonto );
		Integer ultimaOrdemParada = LinhaPontoFacade.getInstance().obterUltimaOrdemParadaPorLinha( requisicaoServico );

		System.out.println( ultimaOrdemParada );
	}

	@Test
	public void inserir() throws Throwable{
		TrajetoDTO trajeto = new TrajetoDTO(null, "teste, teste, teste, teste, teste, teste, teste, teste, teste, teste", null);
		TrajetoDTO trajeto1 = new TrajetoDTO(null, "festa, festa, festa, festa, festa, festa, festa, festa, festa, festa", null);
		TrajetoDTO trajeto2 = new TrajetoDTO(null, "coco, coco, coco, coco, coco, coco, coco, coco, coco, coco", null);
		TrajetoDTO trajeto3 = new TrajetoDTO(null, "uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu, uuuhuuu", null);
		ArrayList<TrajetoDTO> listaTrajetos = new ArrayList<TrajetoDTO>();
		listaTrajetos.add(trajeto);
		listaTrajetos.add(trajeto1);
		listaTrajetos.add(trajeto2);
		listaTrajetos.add(trajeto3);
		RequisicaoServico requisicaoServicoOnibus = new RequisicaoServico( "nelson" , new OnibusDTO());
		RetornoServico retornoServicoOnibus = OnibusFacade.getInstance().filtrar( requisicaoServicoOnibus );
		
		ArrayList< OnibusDTO > listaOnibus = new ArrayList< OnibusDTO >();
		
		for ( AbstractDTO onibusDTO : retornoServicoOnibus.getDtosRetorno() ) {
	        listaOnibus.add( (OnibusDTO) onibusDTO );
        }
		
		RequisicaoServico requisicaoServicoPonto = new RequisicaoServico( "nelson" , new PontoDTO());
		RetornoServico retornoServicoPonto = PontoFacade.getInstance().filtrar( requisicaoServicoPonto );
		
		ArrayList< PontoDTO > listaPonto = new ArrayList< PontoDTO >();
		
		for ( AbstractDTO pontoDTO : retornoServicoPonto.getDtosRetorno() ) {
	        listaPonto.add( (PontoDTO) pontoDTO );
        }
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "nelson" , new LinhaDTO( null, "Jd. Anchieta", "Centro", "Jd. Anchieta", listaOnibus));
		RetornoServico retornoServico = LinhaFacade.getInstance().inserir( requisicaoServico );

		LinhaDTO linhaDto = (LinhaDTO) retornoServico.getSingleDTO();
		
		LinhaPontoDTO linhaPonto = new LinhaPontoDTO();
		Integer ordemParada = 1;
		
		for (PontoDTO pontoDTO : listaPonto) {
			linhaPonto = new LinhaPontoDTO();
			linhaPonto.setLinha(linhaDto);
			linhaPonto.setPonto(pontoDTO);
			linhaPonto.setOrdemParada(ordemParada.toString());
			RequisicaoServico requisicaoServicoLinhaPonto = new RequisicaoServico( "nelson" , linhaPonto);
			LinhaPontoFacade.getInstance().inserir( requisicaoServicoLinhaPonto );
			ordemParada++;
		}
		
		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}

	//@Test
	public void alterar() throws Throwable{
		RequisicaoServico requisicaoServico = new RequisicaoServico( "nelson" , new LinhaDTO("1",null,null,null,null));
		RetornoServico retornoServico = LinhaFacade.getInstance().alterar( requisicaoServico );

		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}

	//@Test
	public void delete() throws Throwable{
		// Consultando
		RequisicaoServico requisicaoServicoFilter = new RequisicaoServico( "teste", new LinhaDTO("3") );
		RetornoServico retornoServicoFilter = LinhaFacade.getInstance().filtrar( requisicaoServicoFilter );
		if ( !Utilidades.isNuloOuVazio( retornoServicoFilter.erro ) ) {
			throw retornoServicoFilter.erro;
		}
		for ( AbstractDTO abstractsDTOs : retornoServicoFilter.getDtosRetorno() ) {
			System.out.println( abstractsDTOs );
		}
		
		
		RequisicaoServico requisicaoServico = new RequisicaoServico( "gabriel" , retornoServicoFilter.getSingleDTO() );
		RetornoServico retornoServico = LinhaFacade.getInstance().excluir( requisicaoServico );

		filtrar();

		if( !Utilidades.isNuloOuVazio( retornoServico.erro )){
			throw retornoServico.erro;
		}
	}
}
